package dominio;

import java.util.*;

public class Sistema {
   
  
   //Atributos
    private ArrayList<Jugador> listaJugadores = new ArrayList<Jugador>();
    private ArrayList<Partida> listaPartidas = new ArrayList<Partida>();
    private Partida partidaActual;
    

    //Métodos de acceso, modificación y agregar
    public ArrayList<Jugador> getListaJugadores() {
        return listaJugadores;
    }

    public void setListaJugadores(ArrayList<Jugador> listaJugadores) {
        this.listaJugadores = listaJugadores;
    }

    public void addListaJugadores(Jugador jugador) {
        this.listaJugadores.add(jugador);
    }

    public ArrayList<Partida> getListaPartidas() {
        return listaPartidas;
    }

    public void setListaPartidas(ArrayList<Partida> listaPartidas) {
        this.listaPartidas = listaPartidas;
    }

    public void addListaPartidas(Partida partida) {
        partidaActual = partida;
        this.listaPartidas.add(partida);
    }
    
    public Partida getPartidaActual(){
        return partidaActual;
    }
    
    public void setPartidaActual(Partida partida){
        partidaActual = partida;
    }
    
    
    //Constructor
    public Sistema() {
        this.listaJugadores = new ArrayList<Jugador>();
        this.listaPartidas = new ArrayList<Partida>();
    }
    

    //Método que devuelve el ranking de jugadores (lista desordenada)
    public ArrayList<Jugador> rankingJugadores(ArrayList<Jugador> jugadores) {
        ArrayList<Jugador> rankingJugadores = new ArrayList<Jugador>();
        for (int i = 0; i < jugadores.size(); i++) {
            if (jugadores.get(i).getPartidasGanadas() > 0) {
                rankingJugadores.add(jugadores.get(i));
            }
        }
        return rankingJugadores;
    }

    
    public void moverPanel(int panel, char sentido) {
        partidaActual.getTablero(panel).mover(sentido);
    }
    

    public void rotarPanel(int panel, boolean horario) {
        partidaActual.getTablero(panel).rotar(horario);
    }
    

    public void colocarFicha(Posicion posicion, Ficha ficha) {
        ficha.setNivel(partidaActual.obtenerNivel(posicion.getFila(), posicion.getColumna()));
        partidaActual.getTablero(ficha.getNivel() - 1).agregarFicha(posicion, ficha);
    }
    
    
    //Método que indica qué jugador ha ganado la partida
    public boolean ganoJugador(Jugador jugador) {
        return partidaActual.ganoJugador(jugador);
    }        
}